package vip.liux.backend.adapter.web;

import org.springframework.web.bind.annotation.*;
import vip.liux.application.dots.ListResultDto;
import vip.liux.backend.application.service.product.CategoryDto;
import vip.liux.backend.application.service.product.CategoryService;
import vip.liux.backend.application.service.product.CreateCategoryDto;
import vip.liux.contracts.shared.enums.product.CategoryType;

import javax.validation.Valid;

@RestController
@RequestMapping("/api/category")
public class CategoryController {

    private final CategoryService categoryService;

    public CategoryController(CategoryService categoryService) {
        this.categoryService = categoryService;
    }

    /**
     * 创建类目
     *
     * @param categoryDto 类目数据传输对象
     * @return 创建的类目
     */
    @PostMapping
    public CategoryDto createCategory(@Valid @RequestBody CreateCategoryDto categoryDto) {
        return categoryService.createCategory(categoryDto);
    }

    /**
     * 获取所有类目
     *
     * @return 类目列表
     */
    @GetMapping
    public ListResultDto<CategoryDto> getCategoryList(@RequestParam(defaultValue = "PHYSICAL") CategoryType type) {
        return categoryService.getCategoryList(type);
    }

    /**
     * 根据ID获取类目
     *
     * @param id 类目ID
     * @return 类目数据传输对象
     */
    @GetMapping("/{id}")
    public CategoryDto getCategoryById(@PathVariable Long id) {
        return categoryService.getCategoryById(id);
    }

    /**
     * 重命名类目
     *
     * @param id 类目ID
     * @param categoryDto 类目数据传输对象
     * @return 重命名后的类目
     */
    @PutMapping("/{id}")
    public CategoryDto renameCategory(@PathVariable Long id, @RequestBody CreateCategoryDto categoryDto) {
        return categoryService.renameCategory(id, categoryDto);
    }

    /**
     * 删除类目
     *
     * @param id 类目ID
     */
    @DeleteMapping("/{id}")
    public void deleteCategory(@PathVariable Long id) {
        categoryService.deleteCategory(id);
    }
}